/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package baseDatos;

import entidades.Categoria;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Facundo
 */
public class CategoriaDAO {

    private String query;
    private Connection conDB;
    private PreparedStatement pst;

    public CategoriaDAO(Connection con) {
        this.conDB = con;
    }

    public CategoriaDAO() {
    }

    /**
     * @return the query
     */
    public String getQuery() {
        return query;
    }

    /**
     * @param query the query to set
     */
    public void setQuery(String query) {
        this.query = query;
    }

    /**
     * @return the conDB
     */
    public Connection getConDB() {
        return conDB;
    }

    /**
     * @param conDB the conDB to set
     */
    public void setConDB(Connection conDB) {
        this.conDB = conDB;
    }

    /**
     * @return the pst
     */
    public PreparedStatement getPst() {
        return pst;
    }

    /**
     * @param pst the pst to set
     */
    public void setPst(PreparedStatement pst) {
        this.pst = pst;
    }


    /*
     * Metodo para devolver todos las categorias de la base.
     */
    public ArrayList getCategorias() {
        ArrayList todos = null;
        String sql = "select * from PC_CATEGORIA";
        System.out.println("Sentencia utilizada para trer las categorias existentes: " + sql);
        todos = this.devolverCategorias(sql);
        return todos;
    }

    /*
     * Metodo que devuelve un array con todos las categorias de la base de acuerdo a la sentencia que recibe
     * como parametro.
     * retorna un arrayList de categorias
     */
    private ArrayList devolverCategorias(String sentencia) {
        try {
            ArrayList todos = null;
            Categoria cat = null;
            todos = new ArrayList();
            ResultSet rs;
            setQuery(sentencia);
            setPst(getConDB().prepareStatement(getQuery()));
            rs = getPst().executeQuery();
            while (rs.next()) {
                cat = new Categoria();
                if (rs.getString("color") != null) {
                    cat.setColor(rs.getString("color"));
                }
                cat.setNombre(rs.getString("nombre"));
                todos.add(cat);
            }
            rs.close();
            getPst().close();
            return todos;
        } catch (SQLException ex) {
            Logger.getLogger(CategoriaDAO.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Excepcion: " + ex.getMessage());
        }
        System.out.println("Error al querer buscar las categorias existentes.");
        return null;
    }


    /*
     * Metodo que devuelve una categoria determinada de acuerdo al codigo pasado por parametro.
     * Este metodo crea la sentencia y se la envia al metodo devolverCAtegoria(), que retorna
     * un objeto categoria
     */
    public Categoria getCategoria(int codigo) {
        System.out.println("Devolviendo categoria de piel...");
        String sentencia = "SELECT * from PC_CATEGORIA where codigo_categoria=" + codigo;
        System.out.println("Sentencia utilizada para devolver la categoria: " + sentencia);
        Categoria cat = this.devolverCategoria(sentencia);
        return cat;
    }

    /*
     * Metodo que devuelve una sola categoria. parametro de entrada una sentencia.
     */
    private Categoria devolverCategoria(String sentencia) {
        try {
            Categoria cat = null;
            ResultSet rs = null;
            setQuery(sentencia);
            setPst(getConDB().prepareStatement(getQuery()));
            rs = getPst().executeQuery();
            while (rs.next()) {
                cat = new Categoria();
                if (rs.getString("color") != null) {
                    cat.setColor(rs.getString("color"));
                }
                cat.setNombre(rs.getString("nombre"));
            }
            getPst().close();
            rs.close();
            return cat;
        } catch (SQLException ex) {
            Logger.getLogger(AnimalDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    /*
     * Metodo que devuelve el codigo de una categoria, recibe como parametro el nombre de la categoria
     */
    public int devolverCodigoCategoria(String nombre) {
        int codigoCategoria = -1;
        ResultSet rs = null;
        setQuery("select codigo_categoria from PC_CATEGORIA where nombre='" + nombre + "'");
        try {
            setPst(getConDB().prepareStatement(getQuery()));
            rs = getPst().executeQuery();
            while (rs.next()) {
                codigoCategoria = rs.getInt("codigo_categoria");
            }
            getPst().close();
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(AnimalDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return codigoCategoria;
    }
}
